'''
异常：
当程序执行到无法处理的错误时（如 1 / 0），Python 会自动创建一个异常对象（包含错误类型和描述），并终止当前代码块的执行
如果未对异常进行处理，程序会直接崩溃并显示错误信息（Traceback）
异常处理：
try：包裹可能出错的代码；
except：捕获并处理指定异常；
else：无异常时执行；
finally：必执行的清理操作；
raise：主动抛出异常
'''
# print(1/0)
# print(name)
# try:
#     num = int(input("请输入一个整数："))
#     result = 10 / num
#     print(f"10 除以 {num} 的结果是：{result}")
# except ValueError:
#     print("输入错误！请输入有效的整数。")
# except ZeroDivisionError:
#     print("错误！除数不能为零。")
# else:
#     print("执行下一步")
# finally:
#     print("异常处理完毕")
# else:
#     print("执行下一步")
# try:
#     list = [1,2,3,4]
#     print(list[6])
# except IndexError:
#     print("数组下标越界")
# try:
#     int(input("请输入数字:"))
# except ValueError:
#     print("输入数字异常")
# 多个异常捕获
try:
    list = [1,2,3,4]
    print(list[6])
except (IndexError,ValueError):
    print("数组下标越界")
# 主动抛出异常
def check_age(age):
    if age < 0:
        # 主动抛出 ValueError，并附带错误信息
        raise ValueError("年龄不能为负数！")
    print(f"年龄是：{age}")

try:
    check_age(-5)
except ValueError as e:
    print(f"捕获到错误：{e}")  # 输出：捕获到错误：年龄不能为负数！


# 定义自定义异常（继承 Exception）
class AgeOutOfRangeError(Exception):
    """年龄超出有效范围（0~120）时抛出的异常"""
    pass  # 简单定义，使用父类的默认行为

def set_age(age):
    if not (0 <= age <= 120):
        # 主动抛出自定义异常，并附带错误信息
        raise AgeOutOfRangeError(f"年龄 {age} 无效！必须在 0~120 之间。")
    print(f"年龄设置为：{age}")

# 测试自定义异常
try:
    set_age(150)  # 超出范围，触发异常
except AgeOutOfRangeError as e:
    print(f"捕获到错误：{e}")  # 输出：捕获到错误：年龄 150 无效！必须在 0~120 之间。